 /*******************************************************************************
  * Copyright (c) 2000, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
  * IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.core.internal.events;

 import org.eclipse.core.resources.*;
 import org.eclipse.core.runtime.PerformanceStats;

 /**
  * An ResourceStats collects and aggregates timing data about an event such as
  * a builder running, an editor opening, etc.
  */
 public class ResourceStats {
     /**
      * The event that is currently occurring, maybe <code>null</code>
      */
     private static PerformanceStats currentStats;
     //performance event names
 public static final String EVENT_BUILDERS = ResourcesPlugin.PI_RESOURCES + "/perf/builders"; //$NON-NLS-1$
 public static final String EVENT_LISTENERS = ResourcesPlugin.PI_RESOURCES + "/perf/listeners"; //$NON-NLS-1$
 public static final String EVENT_SAVE_PARTICIPANTS = ResourcesPlugin.PI_RESOURCES + "/perf/save.participants"; //$NON-NLS-1$
 public static final String EVENT_SNAPSHOT = ResourcesPlugin.PI_RESOURCES + "/perf/snapshot"; //$NON-NLS-1$

     //performance event enablement
 public static boolean TRACE_BUILDERS = PerformanceStats.isEnabled(ResourceStats.EVENT_BUILDERS);
     public static boolean TRACE_LISTENERS = PerformanceStats.isEnabled(ResourceStats.EVENT_LISTENERS);
     public static boolean TRACE_SAVE_PARTICIPANTS = PerformanceStats.isEnabled(ResourceStats.EVENT_SAVE_PARTICIPANTS);
     public static boolean TRACE_SNAPSHOT = PerformanceStats.isEnabled(ResourceStats.EVENT_SNAPSHOT);

     public static void endBuild() {
         if (currentStats != null)
             currentStats.endRun();
         currentStats = null;
     }

     public static void endNotify() {
         if (currentStats != null)
             currentStats.endRun();
         currentStats = null;
     }

     public static void endSave() {
         if (currentStats != null)
             currentStats.endRun();
         currentStats = null;
     }

     public static void endSnapshot() {
         if (currentStats != null)
             currentStats.endRun();
         currentStats = null;
     }

     /**
      * Notifies the stats tool that a resource change listener has been added.
      */
     public static void listenerAdded(IResourceChangeListener listener) {
         if (listener != null)
             PerformanceStats.getStats(EVENT_LISTENERS, listener.getClass().getName());
     }

     /**
      * Notifies the stats tool that a resource change listener has been removed.
      */
     public static void listenerRemoved(IResourceChangeListener listener) {
         if (listener != null)
             PerformanceStats.removeStats(EVENT_LISTENERS, listener.getClass().getName());
     }

     public static void startBuild(IncrementalProjectBuilder builder) {
         currentStats = PerformanceStats.getStats(EVENT_BUILDERS, builder);
         currentStats.startRun(builder.getProject().getName());
     }

     public static void startNotify(IResourceChangeListener listener) {
         currentStats = PerformanceStats.getStats(EVENT_LISTENERS, listener);
         currentStats.startRun();
     }

     public static void startSnapshot() {
         currentStats = PerformanceStats.getStats(EVENT_SNAPSHOT, ResourcesPlugin.getWorkspace());
         currentStats.startRun();
     }

     public static void startSave(ISaveParticipant participant) {
         currentStats = PerformanceStats.getStats(EVENT_SAVE_PARTICIPANTS, participant);
         currentStats.startRun();
     }
 }
